import pandas as pd

# 功能1：读取 student.xlsx 文件内容，并打印输出
def read_and_print_excel():
    try:
        # 读取文件
        excel_file = pd.ExcelFile('student.xlsx')
        # 获取所有表名
        sheet_names = excel_file.sheet_names
        sheet_names
        for sheet_name in sheet_names:
            df = excel_file.parse(sheet_name)
            print(f'sheet表名为{sheet_name}的基本信息：')
            df.info()
            # 查看数据集行数和列数
            rows, columns = df.shape

            if rows < 100 and columns < 20:
                # 短表数据（行数少于100且列数少于20）查看全量数据信息
                print(f'sheet表名为{sheet_name}的全部内容信息：')
                print(df.to_csv(sep='\t', na_rep='nan'))
            else:
                # 长表数据查看数据前几行信息
                print(f'sheet表名为{sheet_name}的前几行内容信息：')
                print(df.head().to_csv(sep='\t', na_rep='nan'))
        return df
    except FileNotFoundError:
        print('文件未找到，请确认文件路径和文件名是否正确。')


# 功能2：按性别统计学生人数，并打印输出
def count_by_gender(df):
    gender_count = df['性别'].value_counts()
    print('按性别统计学生人数：')
    print(gender_count)


# 功能3：按年龄段统计学生人数，并打印输出
def count_by_age(df):
    # 定义年龄段的划分区间
    age_bins = [0, 18, 30, 50, float('inf')]
    age_labels = ['0 - 18岁', '19 - 30岁', '31 - 50岁', '51岁及以上']
    # 按年龄段统计学生人数
    df['年龄段'] = pd.cut(df['年龄'], bins=age_bins, labels=age_labels)
    age_group_count = df['年龄段'].value_counts()
    print('按年龄段统计学生人数：')
    print(age_group_count)


# 功能4：按地区（外省按省份，海南省按市县）统计学生人数，并打印输出
def count_by_area(df):
    def extract_location(address):
        if '海南省' in address:
            return address.split('省')[1].split('市')[0].split('县')[0]
        else:
            return address.split('省')[0].split('自治区')[0]

    df['地区'] = df['家庭地址'].apply(extract_location)
    location_count = df['地区'].value_counts()
    print('按地区（外省按省份，海南省按市县）统计学生人数：')
    print(location_count)


if __name__ == '__main__':
    data_frame = read_and_print_excel()
    if data_frame is not None:
        count_by_gender(data_frame)
        count_by_age(data_frame)
        count_by_area(data_frame)